#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

#define MAX_LEN 100
int len;

void input_handler(int num) {
  char data[MAX_LEN];
  int len;

  // 读取定并输出stdio上的输入
  len = read(STDIN_FILENO, &data, MAX_LEN);
  data[len] = 0;
  printf("input available:%s\n", data);
}

void stop_handler(int signo) {
  printf("processs stoped\n");
  exit(0);
}
int main() {
  int oflags;

  // 启动信号机制
  signal(SIGIO, input_handler);
  // 设置文件的拥有者，这样就直到把信号发送给谁(当前进程);即把标准输入文件的拥有者设置为当前进程
  fcntl(STDIN_FILENO, F_SETOWN, getpid());
  // 给文件的状态参数加了一个ASYNC
  oflags = fcntl(STDIN_FILENO, F_GETFL);
  fcntl(STDIN_FILENO, F_SETFL, oflags | FASYNC);

  signal(SIGTERM, stop_handler);
  signal(SIGINT, stop_handler);

  // 死循环仅为保持进程不终止
  while (1)
    ;
}